
Este documento fue elaborado por los I.F. **Sofía Mariana García Mora, Evelyn Gutiérrez, Andrea Jiménez Orozco, Roberto Chávez Guerrero y José Fernando Flores García**, como un trabajo parcial para la materia de **Microestructura y Sistemas de Trading - ITE1731**, la cual es parte del curriculum de la licenciatura en Ingeniería Financiera, ofertada por la universidad **ITESO**. En el presente trabajo se plantea la respuesta a la siguiente pregunta: *¿Cómo análizar el desempeño de la actividad de trading?*
Para correr este notebook es necesario tener instaladas y/o en el archivo _requirements.txt_ las siguientes librerías :
Para correr este notebook es necesario contar con los siguientes archivos y dependencias externas:
Se puede llegar a pensar en repetidas ocaciones que el conocimiento financiero o técnico en las inversiones son unas de las variables determinantes para generar un rendimiento considerado como "bueno" dependiendo del contexto. Sin embargo, existe otro enfoque mucho más humano que incluye el análisis de la persona misma que es quien toma una serie de decisiones para llegar a un resultado objetivo. La piscología es una de las ciencias interrelacionadas al momento de hacer trading que influye directamente en las operaciones, y el no considerarlo sería omitir una gran oportunidad para mejorar considerablemente el desempeño.
¿Por qué es esto? La mayoría de nosotros puede cohincidir en que tomamos decisiones concientes o inconsientes. Pero quizá estas decisiones cualquiera sea su modalidad pueden estar sesgadas, es decir existe un peso desproporcionado a favor o en contra de una cosa, persona o grupo en comparación con otra, generalmente de una manera que se considera injusta.
Cada ser humano es diferente y por ende su proceso para tomar decisiones, pero existe la posibilidad de analiar y encontrar patrones que determinen dichos sesgos en donde el primer paso para corregirlos es ser conciente de ellos.
El Comportamiento en las Finanzas o mejor conocido por su nombre en inglés como Behavioral Finance, es una nueva rama de estudio que fusiona como ya se mencionó anteriormente aspectos psicológicos de las personas en el ámbito financiero. El objetivo principal es hacernos concientes de dichos sesgos o elementos psicologicos para tratar de ser objetivos y corregirlos.
El presente proyecto tiene como finalidad abordar desde una de las muchas perspectivas, el acto de realizar trading, que como bien sabemos es la operación misma de comprar/vender un activo cuyo prósito sigue una estrategia y esta se compone de varias decisiones. Por lo que se pretende primeramente hacer un análisis general de la cuenta para posteriormente identificar si existieron sesgos o no al momento de ejecutar operaciones.
</font>
El objetivo principal de este laboratorio es analizar a profunidad el proceso de inversión de un trader e identificar posibles sesgos, ya que al desarrollar métricas y procesos para analizar la información que se genera a partir de la cuenta de trading, se puede encontrar una manera de generalizar ciertos aspectos de una estrategia y por ende áreas de mejora.
El enfoque en el cual se centrará una parte importante del proceso tiene que ver con el estudio de un sesgo conocido como disposition effect, el cuál de manera breve nos habla de las veces en las que se tiene una aversión a la pérdida, postergando la toma de péridas y a su vez la toma rápida de ganancias. Ya que la intensidad del dolor a la pérdida es mucho mayor a la intensidad del placer a las ganancias.
No es ningun secreto que para invertir en los mercados además de contar con fuertes conocimientos se necesita también inteligencia emocional y es inclusive en algunos casos la línea que define el éxito de un trader, este análisis busca encontrar una manera sistemática de evaluar dichos sesgos de cualquier cuenta y hacer al trader mas conciente de sus decisiones a lo largo del proceso.
Para poner en marcha uno de los elementos escenciales para comenzar como lo es el historial de operaciones cada integrante del equipo tuvo un proceso previo de 12 días en donde por medio de una cuenta demo en MetaTrader5 se realizarón operaciones de trading en el mercado de divisas (FX) por lo menos una al día.
La estructura del proyecto se compone de la siguiente manera:
1. Análisis general de la cuenta para responder a aspectos básicos como:
- ¿Cuál fue el capital acumulado de la cuenta al final del periodo?
- ¿Cuáles fueron los activos en los que se invirtió más capital?
- ¿Cuántas operaciones se cerraron con pérdida y con ganancia?
- ¿Cuál fue el momento en donde se presentó la máxima péridida flotante y la mayor ganancia flotante?
- ¿Cómo se comportó el rendimiento acumulado y al final de la cuenta versus un benchmark en el mercado?
2. Realizar de manera sistemática una evaluación del sesgo "disposition effect":
- Definir operaciones ancla (ganadoras) y operaciones abiertas al tiempo de cierre.
- Calcular la péridad flotante de dichas operaciones abiertas por cada ancla y contabilizar por cada ocurrencia:
+ Status quo
+ Aversión a la pérdida
+ Sensibilidad decreciente
De esta manera el trader podrá visualizar de manera sintetizada el resultado general de sus operaciones y si en efecto incurrió en un sesgo.
Para leer cada una de las cuenta de las operaciones historicas fue necesario conectar con la API de MetaTrader5. Ya sea ingresando el usuario y contraseña en el archivo Accounts.csv con el nombre correspondiente o bien responiendo "Otros" que descargará de la misma manera automática dicha información.
En caso de no ingresar un nombre válido o cuenta incorrecta, se deplegará una leyenda informando el tipo de error. Esto es bastante útil pues se busca que cualquier persona con una cuenta en MetaTrader5 realice el análisis.
#Librerías
from functions import *
from visualizations import *
import warnings
warnings.filterwarnings("ignore")
La información desplegada corresponde a cada una de las operaciones realizadas durante el periodo de tiempo la cual incluye elementos indispensables como dirección, volumen, instrumento, tiempo de apertura y cierra así como su precio correspondiente y finalmente pérdidas y ganancias.
#Se muestra el ejemplo crudo de una cuenta
f_leer_archivo()
El archivo de functions.py contiene los siguientes DataFrames a continuación necesarios para la construcción de la primera parte:
f_leer_archivo: Lectura y visualización del historial de operaciones.
f_pip_size: Cáluclo del tamaño de pips por instrumento, pues al ser pares de divisas la conversión es diferente para cada una. Este paso es relevante para el cálculo del P&L
f_columnas_tiempos: Cambia las columnas de apertura y cierre de operaciones a formato datetime con la intención de hacer más sencilla la lectura y manejo de datos. A su vez determina el tiempo transcurrido en el que se mantuvo abierta la operación.
f_columnas_pips: Se expresan los pips generados por operaciones, es decir pérdidas y ganancias expresadas en esta unidad, de igual manera el P&L acumulado.
Finalmente se agregan dos últimos apartados, el primero correspondiente al ranking de instrumentos más utilizados y segundo las estadisticas básicas del historial de trading.
data, data2, data3, data4, df1_est_ba, df2_ranking = Full_Part1()
#Ejemplo de tamaño de pips independientemente del intrumento
f_pip_size('USDJPY'), f_pip_size('AUDUSD')
f_columnas_tiempos = data2.loc[:, ['close_time',"open_time",'Type',"Symbol","Profit","time"]]
f_columnas_tiempos.head()
f_columnas_pips = data2.loc[:, ['close_time',"open_time",'Type',"Symbol","pips","pips_acm","profit_acm"]]
f_columnas_pips.head()
#Resultados de estadísticas básicas
df1_est_ba
# Resultados del ranking
df2_ranking
pie_chart(df2_ranking)
Las métricas de atribución al desempeño ayudan al trader a analizar las ganancias por día y acumuladas respecto al inicio. Calculando el capital acumulado y por ende su evolución. Con esta información es posible obtener otros puntos relevantes como el DrawDown, DrawUp y Sharpe Ratio en su forma original, es decir comparando contra la tasa de interés libre de riesgo y en su forma actualizada descrita por el CFA cuya comparación se basa contra el benchmark del mercado, en este caso el S&P 500.
df_capital = f_evolucion_capital(data3)
df_capital.head()
est_mad = f_estadisticas_mad(0.001, df_capital)
est_mad
Como se mencionó anteriormente en esta parte se pretende contabilizar las veces que ocurrió el sesgo denominado "disposition effect" el cuál habla sobre la dificultad de asumir péridas. El cual se ve reflejando en operaciones con péridida flotante por más tiempo y operaciones con toma de ganancia apresuradas con el fin de compensar.
En la primera función denominada f_be_de_parte1 se extraen de manera separada las operaciones ganadoras, consideradas como ancla aquellas cerradas con un monto positivo. Y operaciones de pérdidas en donde por medio de una interación se determino cuales se encontraban abiertas al momento de que otra operación ancla. Finalmente para la determinación de la pérdida flotante, se descargaron precios intradiarios desde la API de MetaTrader5.
Por lo tanto la segunda parte llamda f_be_de_parte2 es un diccionario que contabiliza las ocurrencias y guarda dentro información relevante tanto de la operación ancla (ganadora), así como a la correspondiente abierta con pérdida flotante. Cabe mencionar que existen operaciones cerradas a las cuales no les correspondía ninguna abierta con pérdida, por lo que no es de extrañarse que no se encuentren todas las fechas completas.
ocurrencias, df_anclas = f_be_de_parte1(data3)
df_anclas.head()
ocurrencias.head()
diccionario = f_be_de_parte2(ocurrencias,df_anclas)
diccionario['ocurrencias']
# Segunda parte del diccionario, mostrando Disposition effect
diccionario["resultados"] ['dataframe']
A partir de los análisis generados se pueden llegar a diversas conclusiones.
Primeramente, los trades generados de forma manual, no fueron constantes, es decir, los volumenes, así como los riesgos que se tomaron no resultaron iguales en todos los trades, esto debido a que no fueron generados por traders con una larga experiencia en el mundo del trading.
Por otra parte, esa falta de experiencia en el mundo del trading podría causar mayores incidencias en los sesgos analizados en la rama de behavioral finance.
Finalmente, se comprendió la importancia que tiene el behavioral finance en el trading, la variedad de sesgso que pueden ocurrir, y cómo afectan al desempeño del trading, pueden ser la base de los sistemas de trading algorítmico, donde algoritmos automatizados crean esas órdenes de compra y venta, ya que para hacerlo correctamente sus parámetros deben estar correctamente delimitados.